#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：python_learning 
@File ：测试队列数据报文发送（接收模块）.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2024/12/29 13:30 
"""

import socket
import threading
import time
from queue import Queue
import json


class DataReceiver:
	"""
	socket数据接收模块，用于接收发送模块发送的数据。
	"""

	def __init__(self, host: str, port: int):
		"""
		初始化DataReceiver类。

		:param host: 服务器地址。
		:param port: 服务器端口。
		"""
		self.host = host
		self.port = port
		self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		self.socket.bind((self.host, self.port))  # 绑定地址和端口

	def start(self):
		"""
		启动数据接收服务。
		"""
		self.socket.listen()
		print(f"接收服务启动，监听 {self.host}:{self.port}")
		threading.Thread(target=self._receive_data).start()

	def _receive_data(self):
		"""
		接收数据的方法。
		"""
		conn, addr = self.socket.accept()  # 接受连接
		with conn:
			print(f"连接地址：{addr}")
			while True:
				try:
					data = conn.recv(1024)  # 接收数据
					if not data:
						break
					print(f"接收到数据：{data.decode()}")
				except socket.error as e:
					print(f"接收数据时出错：{e}")
					break

	def stop(self):
		"""
		停止数据接收服务。
		"""
		self.socket.close()


# 主函数
if __name__ == "__main__":
	host = 'localhost'
	port = 12345
	receiver = DataReceiver(host, port)
	receiver.start()

	try:
		while True:
			time.sleep(1)  # 保持主线程运行
	except KeyboardInterrupt:
		receiver.stop()
